home *** CD-ROM | disk | FTP | other *** search
/ MacTech 1 to 12 / MacTech-vol-1-12.toast / Source / MacTech® Magazine / Volume 07 - 1991 / 07.05 May 91 / Math Parser ƒ / ParserProcs / Operations < prev    next >
Encoding:
Text File  |  1990-10-31  |  2.2 KB  |  124 lines  |  [TEXT/PJMM]

  1. unit Operations;
  2.  
  3. interface
  4.  
  5.     uses
  6.         ParserGlobals;
  7.  
  8.     procedure realbinaryoperations (var realbinoperator: stringsize; var b1, b2, b3: extended; var error: str255);
  9.  
  10.     procedure realfunctionoperations (var realfunctiontype, realfctoperator: stringsize; var b1, b2, b3: extended; var error: str255);
  11.  
  12. implementation
  13.  
  14.  
  15.     procedure realbinaryoperations;
  16.  
  17.         label
  18.             999;
  19.  
  20.         var
  21.             j, a, b, c: integer;
  22.  
  23.  
  24.     begin
  25.  
  26. {evaluating the real binary operations}
  27.  
  28.         if realbinoperator = plus then
  29.             b3 := b1 + b2;
  30.         if realbinoperator = minus then
  31.             b3 := b1 - b2;
  32.         if realbinoperator = asterisk then
  33.             b3 := b1 * b2;
  34.         if realbinoperator = equals then
  35.             b3 := b2;
  36.         if (realbinoperator = rightslash) and (b2 <> 0) then
  37.             b3 := b1 / b2;
  38.         if (realbinoperator = rightslash) and (b2 = 0) then
  39.             begin
  40.                 error := 'divide by zero';
  41.                 goto 999;
  42.             end;
  43.         if realbinoperator = exponent then
  44.             begin
  45.                 if b1 = 0 then
  46.                     b3 := 0;
  47.                 if b1 < 0 then
  48.                     b3 := -exp(b2 * ln(-b1));
  49.                 if b1 > 0 then
  50.                     b3 := exp(b2 * ln(b1));
  51.                 if b2 = 0 then
  52.                     b3 := 1;
  53.             end;
  54. 999:
  55.     end;
  56.  
  57.     procedure realfunctionoperations;
  58.  
  59.         label
  60.             999;
  61.  
  62.         var
  63.             x1: extended;
  64.             strvalue: string[30];
  65.  
  66.     begin
  67.  
  68.  
  69.         if realfunctiontype = 'function' then
  70.             begin
  71.                 if realfctoperator = 'sqrt' then
  72.                     begin
  73.                         if (b2 < 0) then
  74.                             begin
  75.                                 error := 'taking the square root of a negative number';
  76.                                 goto 999;
  77.                             end;
  78.                         if b2 >= 0 then
  79.                             b3 := sqrt(b2);
  80.                     end;
  81.                 if realfctoperator = 'sin' then
  82.                     b3 := sin(b2);
  83.                 if realfctoperator = 'cos' then
  84.                     b3 := cos(b2);
  85.                 if realfctoperator = 'exp' then
  86.                     b3 := exp(b2);
  87.                 if realfctoperator = 'ln' then
  88.                     begin
  89.                         if (b2 < 0) then
  90.                             begin
  91.                                 error := 'taking the logarithm of negative number';
  92.                                 goto 999;
  93.                             end;
  94.                         b3 := ln(b2);
  95.                     end;
  96.  
  97.                 if realfctoperator = '''' then
  98.                     begin
  99.                         if (b2 = 0) then
  100.                             begin
  101.                                 error := 'infinite value';
  102.                                 goto 999;
  103.                             end;
  104.                         b3 := 1 / b2;
  105.                     end;
  106.  
  107.  
  108.             end;
  109.  
  110.         if realfunctiontype = 'unary' then
  111.             begin
  112.                 if realfctoperator = plus then
  113.                     b3 := +b1;
  114.                 if realfctoperator = minus then
  115.                     b3 := -b1;
  116.             end;
  117.  
  118.  
  119. 999:
  120.     end;
  121.  
  122.  
  123.  
  124. end.